package plus;
import java.util.*;
import plus.exp.*;
import plus.stmt.*;
import plus.decl.*;
@SuppressWarnings({ "rawtypes", "unchecked" })
public final class Parse {
Scan scanner;
@SuppressWarnings("serial")
public static class Error extends Exception {
	public int type;
	Error(int type) {this.type = type;}
}
private abstract class YYR { abstract void call(); }
public static final String[] tokens = {
	"<END>", "'\"'", "'&'", "'('", "')'", "'+'", 
	"','", "'-'", "'.'", "':'", "';'", "'<'", 
	"'='", "'>'", "'?'", "'['", "'\\'", "']'", 
	"'{'", "'|'", "'}'", "'~'", "AND", "ANSWER", 
	"AS", "BECOMES", "BEGIN", "BITROT", "BREAK", "CALL", 
	"CASE", "CLASS", "DO", "ELSE", "END", "EOL_", 
	"EQV", "EVALUATE", "EXPOP", "FALSE", "FOR", "FUNCTION", 
	"GE", "GIVEN", "IF", "IMPLEMENTATION", "INT", "INTERFACE", 
	"IS", "LE", "MODULE", "MULOP", "NAME", "NE", 
	"NEW", "NEXT", "NIL", "NOP", "NOT", "OF", 
	"OR", "PROCEDURE", "PROGRAM", "REAL", "RECORD", "REPEAT", 
	"SCOPE", "STRING", "THEN", "TRUE", "TYPEDEF", "UNTIL", 
	"USES", "USING", "VAR", "WHILE", "XOR", };
	public static final int t_AND=22, t_ANSWER=23, t_AS=24, t_BECOMES=25, t_BEGIN=26, t_BITROT=27, t_BREAK=28;
	public static final int t_CALL=29, t_CASE=30, t_CLASS=31, t_DO=32, t_ELSE=33, t_END=34, t_EOL_=35;
	public static final int t_EQV=36, t_EVALUATE=37, t_EXPOP=38, t_FALSE=39, t_FOR=40, t_FUNCTION=41, t_GE=42;
	public static final int t_GIVEN=43, t_IF=44, t_IMPLEMENTATION=45, t_INT=46, t_INTERFACE=47, t_IS=48, t_LE=49;
	public static final int t_MODULE=50, t_MULOP=51, t_NAME=52, t_NE=53, t_NEW=54, t_NEXT=55, t_NIL=56;
	public static final int t_NOP=57, t_NOT=58, t_OF=59, t_OR=60, t_PROCEDURE=61, t_PROGRAM=62, t_REAL=63;
	public static final int t_RECORD=64, t_REPEAT=65, t_SCOPE=66, t_STRING=67, t_THEN=68, t_TRUE=69, t_TYPEDEF=70;
	public static final int t_UNTIL=71, t_USES=72, t_USING=73, t_VAR=74, t_WHILE=75, t_XOR=76;
private static final int[] yyCHAR = {-1,34,38,40,41,43,44,45,46,58,59,60,61,62,63,91,92,93,123,124,125,126,};
private final int[] yy_sc = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
	private static final int[] yyTable = {308,0,0,13,18,28,14,28,22,62,19,24,41,71,77,91,121,49,122,25,26,25,26,29,45,45,140,79,161,144,59,145,67,25,26,5,6,9,6,86,68,11,111,185,67,162,27,8,27,53,2,86,3,12,15,15,23,30,32,30,27,239,301,30,244,37,33,31,33,69,266,30,279,30,270,25,26,25,26,181,33,43,25,26,31,25,26,88,88,167,70,94,54,56,95,150,96,122,171,194,54,56,27,156,27,122,58,178,100,27,101,6,27,30,58,30,107,54,56,61,30,163,33,30,33,152,165,61,201,33,67,58,33,197,178,168,154,86,54,56,219,57,30,60,61,178,127,67,178,67,30,63,58,170,86,172,86,65,180,129,178,190,54,56,174,61,94,30,203,95,188,96,178,131,205,73,58,6,191,125,178,224,74,100,6,101,227,129,30,61,75,107,80,240,81,54,56,133,57,82,60,131,13,83,183,84,157,210,63,58,242,245,30,135,65,54,56,225,57,186,60,94,61,158,95,133,96,246,63,58,181,31,73,212,65,248,250,263,100,74,101,135,61,252,253,30,107,75,258,80,260,81,73,189,6,255,82,262,251,74,83,6,84,25,26,30,181,75,6,80,265,81,54,56,189,57,82,60,181,6,83,245,84,268,181,63,58,64,181,272,27,65,54,56,72,57,181,60,189,61,276,30,278,6,281,63,58,282,280,73,33,65,283,25,26,284,74,286,287,61,25,26,30,289,75,290,80,291,81,73,6,293,189,82,292,6,74,83,300,84,27,6,30,302,75,303,80,27,81,54,56,30,57,82,60,6,279,83,30,84,33,223,63,58,285,42,233,33,65,54,56,108,57,267,60,171,61,223,113,106,20,274,63,58,298,243,73,52,65,304,117,223,297,74,241,264,61,261,223,78,141,75,307,80,148,81,73,261,182,138,82,229,126,74,83,238,84,44,236,30,232,75,0,80,198,81,54,56,108,57,82,60,112,0,83,0,84,0,0,63,58,0,223,0,126,65,54,56,130,57,132,60,134,61,136,0,195,223,223,63,58,0,0,73,0,65,155,151,223,0,74,0,223,61,0,149,30,296,75,223,80,0,0,73,0,0,0,82,306,0,74,83,0,84,0,0,30,0,75,0,80,0,81,54,56,0,57,82,60,0,0,83,0,84,0,0,63,58,0,0,294,0,65,54,56,92,57,50,60,48,61,305,0,0,0,0,63,58,223,38,73,0,65,0,0,38,0,74,46,223,61,0,0,30,0,75,0,80,0,0,73,0,0,0,82,177,0,74,83,0,84,0,0,30,0,75,0,80,0,81,0,179,94,195,82,95,0,96,83,187,84,97,98,99,0,0,247,54,56,100,57,101,60,0,202,0,207,107,0,0,63,58,0,211,0,126,65,0,0,130,271,132,103,134,61,136,0,0,104,114,207,0,0,115,73,0,0,0,0,0,0,74,0,0,0,195,0,30,50,75,48,80,0,105,54,56,0,57,82,60,38,0,83,0,84,0,38,63,58,46,0,0,0,65,54,56,0,57,0,60,0,61,0,0,0,0,0,63,58,0,0,73,177,65,0,0,0,0,74,0,0,61,0,0,30,0,75,0,80,0,0,73,0,0,0,82,187,0,74,83,0,84,0,0,30,0,75,0,80,54,56,202,57,207,60,82,0,0,0,83,211,84,63,58,0,0,0,0,65,54,56,0,57,0,60,0,61,207,256,0,0,0,63,58,0,0,73,0,65,0,0,269,195,74,0,273,61,0,0,30,0,75,0,80,0,0,73,0,0,0,82,0,0,74,83,0,84,0,0,30,0,75,0,80,54,56,0,57,0,60,82,0,0,0,83,0,84,63,58,0,0,0,0,65,54,56,0,57,0,60,0,61,40,0,40,0,40,63,58,0,0,73,0,65,40,0,0,0,74,40,40,61,0,40,30,0,75,0,80,0,81,73,55,0,0,82,0,0,74,83,0,84,0,0,30,0,75,0,80,256,81,54,56,76,57,82,60,0,0,83,0,84,269,223,63,58,273,0,233,0,65,54,56,0,57,0,60,0,61,223,0,0,0,0,63,58,0,0,73,0,65,0,0,223,0,74,0,0,61,0,223,30,0,75,0,80,0,81,73,0,0,0,82,0,0,74,83,0,84,0,0,30,0,75,0,80,0,81,54,56,0,57,82,60,0,0,83,0,84,0,0,63,58,0,0,0,0,65,54,56,0,57,0,60,0,61,0,0,0,223,0,63,58,0,0,73,0,65,0,0,223,0,74,0,0,61,0,0,30,0,75,0,80,0,81,73,0,0,0,82,0,0,74,83,0,84,0,0,30,0,75,0,80,0,81,54,56,0,57,82,60,223,0,83,0,84,233,0,63,58,0,0,0,0,65,54,56,223,57,0,60,0,61,40,0,0,0,0,63,58,0,223,73,0,65,0,40,0,223,74,40,0,61,0,0,30,0,75,0,80,0,81,73,0,0,0,82,0,0,74,83,0,84,0,0,78,0,75,0,80,0,81,54,56,223,57,82,60,0,233,83,0,84,0,0,63,58,153,0,0,223,65,54,56,0,0,0,223,0,61,0,0,0,0,223,0,58,0,223,73,0,223,0,163,0,0,74,0,165,61,0,0,30,0,75,0,80,168,81,0,0,0,0,82,0,54,56,83,57,84,60,0,30,0,0,170,0,172,63,58,0,0,0,0,65,54,56,0,57,0,60,0,61,0,0,0,0,0,63,58,223,0,73,0,65,0,0,0,0,74,0,223,61,0,0,30,0,75,0,80,0,81,73,0,0,0,82,0,0,74,83,0,84,0,0,30,0,75,0,80,0,81,54,56,0,57,82,60,0,0,83,0,84,0,0,63,58,0,0,0,0,65,54,56,0,0,0,0,0,61,0,0,0,0,0,0,58,0,0,73,0,0,0,163,0,0,74,0,165,61,0,0,30,0,75,0,80,168,81,0,0,0,0,82,0,54,56,83,57,84,60,0,30,0,0,170,0,172,63,58,0,0,0,0,65,54,56,0,0,0,0,0,61,0,0,0,0,0,0,58,0,0,73,0,0,0,163,0,0,74,0,165,61,0,0,30,0,75,0,80,168,81,54,56,0,0,82,0,0,0,83,0,84,0,0,30,58,0,170,0,172,54,56,163,57,0,60,0,165,61,0,0,0,0,63,58,0,168,0,0,65,11,0,0,199,0,0,0,61,0,0,0,204,0,0,170,0,172,73,0,0,239,0,0,244,74,54,56,0,0,266,30,0,75,270,80,0,81,0,0,58,0,82,0,0,0,83,163,84,0,0,0,165,61,0,0,54,56,0,235,0,168,0,0,0,0,54,56,0,0,58,0,0,0,0,0,30,163,0,170,58,172,165,61,0,0,0,163,0,228,0,168,165,61,0,0,0,0,199,214,0,168,0,0,0,0,204,0,0,170,0,172,54,56,0,57,30,60,0,170,0,172,0,0,0,63,58,0,0,0,0,65,54,56,0,0,0,0,0,61,0,0,0,0,0,0,58,0,0,73,0,0,0,163,0,0,74,0,165,61,0,0,30,0,75,6,80,168,81,54,56,0,0,82,199,0,0,83,0,84,0,0,204,58,0,170,0,172,0,0,163,0,0,0,0,165,61,0,0,0,0,0,54,56,168,57,0,60,0,0,0,199,0,0,0,63,58,0,0,204,0,65,170,0,172,0,0,0,0,61,0,0,0,0,0,0,0,0,216,73,0,0,0,0,0,0,74,0,0,0,0,0,30,0,75,0,80,0,81,54,56,0,57,82,60,0,0,83,0,84,0,0,63,58,0,0,0,0,65,54,56,0,0,0,0,0,61,0,0,0,0,0,0,58,0,0,73,0,0,0,163,0,0,74,0,165,61,0,0,30,0,75,228,80,168,81,54,56,0,0,82,0,0,0,83,0,84,0,0,30,58,0,170,0,172,0,0,163,54,56,0,0,165,61,0,0,0,0,0,6,0,168,58,0,0,0,0,0,199,163,0,0,0,0,165,61,204,0,0,170,230,172,0,168,0,54,56,0,0,0,199,0,0,0,0,0,0,0,204,58,0,170,0,172,0,0,163,0,0,0,0,165,61,0,0,54,56,0,6,0,168,0,0,0,0,0,0,199,0,58,0,0,0,0,0,204,163,0,170,0,172,165,61,0,0,0,203,237,54,56,168,0,54,56,0,0,0,199,0,0,0,0,58,0,0,204,58,0,170,163,172,0,0,163,165,61,0,0,165,61,0,197,0,168,275,54,56,168,0,0,0,0,0,0,199,0,0,0,30,58,0,170,204,172,0,170,163,172,0,0,0,165,61,0,173,0,0,289,192,0,168,159,0,0,11,0,66,199,54,56,0,0,0,0,0,204,0,0,170,0,172,0,58,0,239,54,56,244,0,163,0,0,0,266,165,61,0,270,0,58,289,0,0,168,0,0,163,0,0,0,199,165,61,0,0,0,54,56,204,0,168,170,0,172,11,0,0,199,0,173,58,0,0,192,0,204,159,163,170,0,172,66,165,61,239,5,0,244,289,0,9,168,0,266,0,0,0,270,199,0,0,0,0,173,0,0,204,0,0,170,0,172,0,0,0,0,0,0,0,173,0,0,193,0,0,160,0,173,0,0,0,0,0,0,0,0,0,0,0,173,0,0,173,148,173,142,0,0,0,0,0,173,139,0,0,173,173,0,0,0,0,0,0,0,0,0,0,0,173,173,173,0,0,0,0,0,173,173,173,0,0,0,0,173,0,0,0,0,123,0,0,0,0,128,173,0,0,0,0,0,0,0,173,0,0,0,0,0,0,0,0,146,0,0,173,173,0,173,123,173,0,0,0,0,0,0,173,0,0,164,173,173,0,0,169,173,0,173,0,0,175,0,0,173,173,173,173,173,0,184,0,173,173,0,0,0,0,0,173,0,0,0,0,0,0,200,0,0,0,0,0,0,0,0,0,0,0,0,213,0,0,0,217,235,0,228,0,0,0,0,173,226,214,0,0,0,0,0,0,0,219,0,0,0,0,224,0,0,0,228,173,0,173,0,0,0,0,0,0,0,0,173,173,0,0,0,0,0,0,0,0,0,263,0,253,0,0,0,0,0,0,260,0,262,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,278,0,0,0,0,0,0,0,0,0,0,0,0,291,0,293,0,0,0,0,0,0,300,0,0,303,};
	private static final int[] yyCheck = {308,0,0,12,17,27,13,33,21,61,17,21,40,70,76,90,120,48,120,24,24,26,26,28,44,51,139,78,160,143,58,143,66,28,28,3,5,8,9,66,67,10,110,184,85,58,24,7,26,52,1,85,2,11,13,19,22,24,31,26,28,10,1,54,10,36,24,30,26,68,10,28,7,75,10,36,36,41,41,58,28,42,42,42,78,45,45,87,108,165,67,106,65,65,106,149,106,149,170,193,53,53,36,155,41,155,65,195,106,42,106,197,45,36,53,41,106,57,57,65,42,53,36,45,41,151,53,53,200,42,159,57,45,53,207,53,151,159,56,56,218,56,65,56,57,202,126,173,177,192,53,56,56,53,173,53,192,56,177,126,187,57,60,60,173,56,113,57,202,113,187,113,211,126,204,56,60,219,57,124,220,223,56,113,224,113,226,124,56,60,56,113,56,239,56,59,59,126,59,56,59,124,240,56,182,56,60,209,59,59,241,244,60,126,59,62,62,209,62,182,62,117,59,60,117,124,117,245,62,62,246,204,59,211,62,247,249,250,117,59,117,124,62,251,252,59,117,59,257,59,259,59,62,182,260,254,59,261,250,62,59,253,59,255,255,62,257,62,262,62,264,62,63,63,247,63,62,63,253,263,62,266,62,267,270,63,63,63,264,271,255,63,71,71,71,71,263,71,254,63,275,255,277,278,280,71,71,281,279,63,255,71,282,268,268,283,63,285,286,71,272,272,63,288,63,289,63,290,63,71,291,292,271,63,288,293,71,63,299,63,268,300,71,301,71,302,71,272,71,77,77,268,77,71,77,303,304,71,272,71,268,309,77,77,279,313,309,272,77,79,79,314,79,315,79,316,77,309,317,317,323,319,79,79,318,324,77,328,79,336,317,309,318,77,340,342,79,343,309,77,329,77,318,77,344,77,79,343,332,345,77,319,348,79,77,350,77,351,319,79,355,79,0,79,352,79,81,81,345,81,79,81,345,0,79,0,79,0,0,81,81,0,321,0,329,81,86,86,329,86,329,86,329,81,329,0,320,309,321,86,86,0,0,81,0,86,346,346,309,0,81,0,321,86,0,346,81,319,81,321,81,0,0,86,0,0,0,81,319,0,86,81,0,81,0,0,86,0,86,0,86,0,86,88,88,0,88,86,88,0,0,86,0,86,0,0,88,88,0,0,352,0,88,91,91,91,91,312,91,312,88,352,0,0,0,0,91,91,321,312,88,0,91,0,0,312,0,88,312,321,91,0,0,88,0,88,0,88,0,0,91,0,0,0,88,320,0,91,88,0,88,0,0,91,0,91,0,91,0,91,0,320,93,322,91,93,0,93,91,320,91,93,93,93,0,0,332,104,104,93,104,93,104,0,320,0,320,93,0,0,104,104,0,320,0,330,104,0,0,330,332,330,93,330,104,330,0,0,93,93,320,0,0,93,104,0,0,0,0,0,0,104,0,0,0,320,0,104,331,104,331,104,0,104,105,105,0,105,104,105,331,0,104,0,104,0,331,105,105,331,0,0,0,105,107,107,0,107,0,107,0,105,0,0,0,0,0,107,107,0,0,105,322,107,0,0,0,0,105,0,0,107,0,0,105,0,105,0,105,0,0,107,0,0,0,105,322,0,107,105,0,105,0,0,107,0,107,0,107,111,111,322,111,322,111,107,0,0,0,107,322,107,111,111,0,0,0,0,111,116,116,0,116,0,116,0,111,322,312,0,0,0,116,116,0,0,111,0,116,0,0,312,322,111,0,312,116,0,0,111,0,111,0,111,0,0,116,0,0,0,111,0,0,116,111,0,111,0,0,116,0,116,0,116,122,122,0,122,0,122,116,0,0,0,116,0,116,122,122,0,0,0,0,122,125,125,0,125,0,125,0,122,339,0,339,0,339,125,125,0,0,122,0,125,339,0,0,0,122,339,339,125,0,339,122,0,122,0,122,0,122,125,339,0,0,122,0,0,125,122,0,122,0,0,125,0,125,0,125,331,125,127,127,339,127,125,127,0,0,125,0,125,331,325,127,127,331,0,325,0,127,129,129,0,129,0,129,0,127,325,0,0,0,0,129,129,0,0,127,0,129,0,0,325,0,127,0,0,129,0,325,127,0,127,0,127,0,127,129,0,0,0,127,0,0,129,127,0,127,0,0,129,0,129,0,129,0,129,131,131,0,131,129,131,0,0,129,0,129,0,0,131,131,0,0,0,0,131,133,133,0,133,0,133,0,131,0,0,0,325,0,133,133,0,0,131,0,133,0,0,325,0,131,0,0,133,0,0,131,0,131,0,131,0,131,133,0,0,0,131,0,0,133,131,0,131,0,0,133,0,133,0,133,0,133,135,135,0,135,133,135,338,0,133,0,133,338,0,135,135,0,0,0,0,135,145,145,338,145,0,145,0,135,339,0,0,0,0,145,145,0,338,135,0,145,0,339,0,338,135,339,0,145,0,0,135,0,135,0,135,0,135,145,0,0,0,135,0,0,145,135,0,135,0,0,145,0,145,0,145,0,145,152,152,356,152,145,152,0,356,145,0,145,0,0,152,152,152,0,0,356,152,162,162,0,0,0,338,0,152,0,0,0,0,356,0,162,0,338,152,0,356,0,162,0,0,152,0,162,162,0,0,152,0,152,0,152,162,152,0,0,0,0,152,0,163,163,152,163,152,163,0,162,0,0,162,0,162,163,163,0,0,0,0,163,168,168,0,168,0,168,0,163,0,0,0,0,0,168,168,356,0,163,0,168,0,0,0,0,163,0,356,168,0,0,163,0,163,0,163,0,163,168,0,0,0,163,0,0,168,163,0,163,0,0,168,0,168,0,168,0,168,174,174,0,174,168,174,0,0,168,0,168,0,0,174,174,0,0,0,0,174,178,178,0,0,0,0,0,174,0,0,0,0,0,0,178,0,0,174,0,0,0,178,0,0,174,0,178,178,0,0,174,0,174,0,174,178,174,0,0,0,0,174,0,183,183,174,183,174,183,0,178,0,0,178,0,178,183,183,0,0,0,0,183,186,186,0,0,0,0,0,183,0,0,0,0,0,0,186,0,0,183,0,0,0,186,0,0,183,0,186,186,0,0,183,0,183,0,183,186,183,198,198,0,0,183,0,0,0,183,0,183,0,0,186,198,0,186,0,186,199,199,198,199,0,199,0,198,198,0,0,0,0,199,199,0,198,0,0,199,198,0,0,198,0,0,0,199,0,0,0,198,0,0,198,0,198,199,0,0,198,0,0,198,199,201,201,0,0,198,199,0,199,198,199,0,199,0,0,201,0,199,0,0,0,199,201,199,0,0,0,201,201,0,0,203,203,0,201,0,201,0,0,0,0,210,210,0,0,203,0,0,0,0,0,201,203,0,201,210,201,203,203,0,0,0,210,0,203,0,203,210,210,0,0,0,0,203,210,0,210,0,0,0,0,203,0,0,203,0,203,212,212,0,212,210,212,0,210,0,210,0,0,0,212,212,0,0,0,0,212,214,214,0,0,0,0,0,212,0,0,0,0,0,0,214,0,0,212,0,0,0,214,0,0,212,0,214,214,0,0,212,0,212,214,212,214,212,215,215,0,0,212,214,0,0,212,0,212,0,0,214,215,0,214,0,214,0,0,215,0,0,0,0,215,215,0,0,0,0,0,216,216,215,216,0,216,0,0,0,215,0,0,0,216,216,0,0,215,0,216,215,0,215,0,0,0,0,216,0,0,0,0,0,0,0,0,215,216,0,0,0,0,0,0,216,0,0,0,0,0,216,0,216,0,216,0,216,225,225,0,225,216,225,0,0,216,0,216,0,0,225,225,0,0,0,0,225,227,227,0,0,0,0,0,225,0,0,0,0,0,0,227,0,0,225,0,0,0,227,0,0,225,0,227,227,0,0,225,0,225,227,225,227,225,228,228,0,0,225,0,0,0,225,0,225,0,0,227,228,0,227,0,227,0,0,228,229,229,0,0,228,228,0,0,0,0,0,228,0,228,229,0,0,0,0,0,228,229,0,0,0,0,229,229,228,0,0,228,229,228,0,229,0,235,235,0,0,0,229,0,0,0,0,0,0,0,229,235,0,229,0,229,0,0,235,0,0,0,0,235,235,0,0,236,236,0,235,0,235,0,0,0,0,0,0,235,0,236,0,0,0,0,0,235,236,0,235,0,235,236,236,0,0,0,236,236,242,242,236,0,274,274,0,0,0,236,0,0,0,0,242,0,0,236,274,0,236,242,236,0,0,274,242,242,0,0,274,274,0,242,0,242,274,294,294,274,0,0,0,0,0,0,274,0,0,0,242,294,0,242,274,242,0,274,294,274,0,0,0,294,294,0,310,0,0,294,310,0,294,310,0,0,294,0,310,294,296,296,0,0,0,0,0,294,0,0,294,0,294,0,296,0,294,305,305,294,0,296,0,0,0,294,296,296,0,294,0,305,296,0,0,296,0,0,305,0,0,0,296,305,305,0,0,0,306,306,296,0,305,296,0,296,305,0,0,305,0,333,306,0,0,333,0,305,333,306,305,0,305,333,306,306,305,349,0,305,306,0,349,306,0,305,0,0,0,305,306,0,0,0,0,310,0,0,306,0,0,306,0,306,0,0,0,0,0,0,0,310,0,0,347,0,0,347,0,310,0,0,0,0,0,0,0,0,0,0,0,310,0,0,310,347,310,347,0,0,0,0,0,310,347,0,0,310,310,0,0,0,0,0,0,0,0,0,0,0,310,310,310,0,0,0,0,0,310,310,333,0,0,0,0,310,0,0,0,0,347,0,0,0,0,347,333,0,0,0,0,0,0,0,333,0,0,0,0,0,0,0,0,347,0,0,333,310,0,333,347,333,0,0,0,0,0,0,333,0,0,347,333,333,0,0,347,310,0,310,0,0,347,0,0,333,333,333,310,310,0,347,0,333,333,0,0,0,0,0,333,0,0,0,0,0,0,347,0,0,0,0,0,0,0,0,0,0,0,0,347,0,0,0,347,349,0,349,0,0,0,0,333,347,349,0,0,0,0,0,0,0,349,0,0,0,0,349,0,0,0,349,333,0,333,0,0,0,0,0,0,0,0,333,333,0,0,0,0,0,0,0,0,0,349,0,349,0,0,0,0,0,0,349,0,349,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,349,0,0,0,0,0,0,0,0,0,0,0,0,349,0,349,0,0,0,0,0,0,349,0,0,349,};
	private static final int[] yyOffset = {0,0,0,0,0,1,0,0,2,3,0,1,0,2,0,0,0,0,0,3,0,2,4,0,5,0,7,2,19,0,1,6,0,4,0,0,61,0,0,0,1,63,68,0,1,71,0,0,0,0,0,2,1,98,11,0,136,115,27,193,160,6,213,270,0,90,24,38,17,0,10,290,0,0,0,21,11,347,18,367,0,424,0,0,0,36,444,36,501,0,12,521,0,580,0,0,0,0,0,0,0,0,0,0,595,652,89,672,37,0,4,727,0,164,0,0,747,219,0,0,12,0,802,0,165,822,137,879,0,899,0,956,0,976,0,1033,0,0,0,9,0,0,0,25,0,1053,0,0,0,91,0,119,1110,0,0,99,0,0,0,122,24,0,1130,1173,0,37,0,0,1193,0,46,0,0,139,1250,0,0,138,1270,0,0,0,201,1313,39,0,1333,150,0,0,0,0,141,95,0,97,0,76,1370,1389,60,1434,135,1464,165,0,0,124,0,142,1474,162,1520,0,1540,1577,1610,0,105,142,170,0,0,146,149,1667,154,1687,1724,1746,0,0,0,0,0,1783,1813,0,0,141,199,162,1846,0,159,216,178,222,0,188,202,183,209,226,246,249,0,214,0,215,219,222,233,244,236,0,229,235,299,0,232,280,306,0,1850,290,0,267,268,297,252,294,288,263,0,293,266,0,289,317,292,295,296,300,1883,0,1926,0,0,303,306,291,310,320,284,1943,1974,0,0,163,1861,0,503,324,264,107,205,274,96,183,403,244,530,361,143,695,0,0,336,319,490,624,350,1936,0,0,86,0,843,808,154,0,132,144,327,321,404,1986,287,2002,179,390,227,0,0,217,916,0,0,};
	private static final int[] yyDefault = {0,0,0,0,-8,-10,-9,-6,0,-18,-7,0,0,0,-49,-55,-51,0,-50,0,-52,-53,0,-56,0,-38,0,-42,0,-43,-147,0,-148,-42,-39,-45,0,-44,-46,-37,-35,0,0,-36,-47,0,-48,-40,0,-41,-54,-47,0,0,0,-149,0,0,0,0,0,0,0,0,-124,0,-130,0,0,-150,-143,0,-145,-121,-116,0,0,0,-147,0,-122,0,-113,-119,-120,-127,0,-101,0,-140,-137,0,-138,-97,-106,-103,-104,-132,-131,-133,-107,-105,-108,-136,0,0,-100,0,-102,-109,-111,0,-112,-99,-135,-134,0,-98,-95,-90,0,-139,0,-156,-88,0,0,0,-89,0,-91,0,-94,0,-92,0,-93,-155,-110,0,-144,-96,-160,0,-123,0,-158,-159,-157,0,-146,0,0,-126,-125,0,-141,-118,-115,-129,0,-154,0,0,-66,-73,-74,-64,0,-62,-73,-63,-65,-61,0,-67,-68,0,0,-69,-153,-57,0,0,0,-152,0,0,-151,-58,-117,-114,-128,0,-142,-29,-25,-18,-81,0,0,0,-75,-81,-147,-80,-71,-84,-72,0,0,0,0,-82,-81,-81,0,-83,0,-17,-59,-70,-60,0,-16,0,0,0,-81,-81,-85,-79,-86,-87,-77,-81,-81,-76,-78,0,0,0,0,-24,0,-27,0,0,-28,0,0,0,0,0,-33,0,-34,0,-23,0,-32,0,-31,0,0,-22,0,0,0,-26,0,-20,0,-21,-81,0,-30,0,-19,0,0,0,-12,0,-13,-15,0,-14,0,0,0,-5,0,-18,-81,-3,-81,-4,-2,0,-11,0,0,-10,-18,-81,-81,-1,0,218,85,308,35,36,87,249,167,93,295,215,220,218,220,16,196,218,116,143,47,124,124,35,254,85,209,288,7,299,218,90,51,17,257,259,146,87,120,137,124,197,234,34,10,277,21,231,218,110,107,};
	private int yyAct(int type) {
		int offset = yyOffset[yyq] + type;
		return yyCheck[offset]==yyq ? yyTable[offset] : yyDefault[yyq];
	}
	private int yyGo(int type) {
		int eid=309+type, offset = yyOffset[eid] + yyq;
		return yyCheck[offset]==eid ? yyTable[offset] : yyDefault[eid];
	}
private static final int[] yyLHS = {0,2, 2, 2, 2, 9, 26, 26, 40, 40, 27, 27, 28, 28, 28, 28, 10, 10, 43, 43, 44, 44, 44, 44, 44, 44, 44, 6, 6, 15, 15, 33, 33, 34, 34, 22, 22, 3, 3, 3, 3, 3, 42, 42, 42, 4, 4, 19, 19, 31, 31, 32, 32, 14, 14, 45, 45, 23, 23, 12, 12, 11, 11, 11, 11, 11, 11, 11, 13, 13, 47, 47, 47, 7, 7, 29, 29, 29, 29, 0, 25, 25, 16, 16, 46, 46, 41, 41, 38, 38, 39, 39, 39, 39, 39, 21, 21, 20, 20, 20, 20, 8, 8, 49, 49, 49, 49, 49, 49, 5, 5, 36, 36, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 17, 17, 17, 17, 17, 17, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30, 30, 24, 24, 24, 24, 24, 24, 37, 37, 18, 18, 35, 35, };
private final YYR[] yyRules = {null,

// rule -1: <20> unit -> PROGRAM NAME eol imports decls stmts suffix
new YYR() { public void call(){
yysp-=7; yyq=yyqs[yysp];
Statement $6=yys_5.pop(); DeclBucket $5=yys_6.pop(); List $4=yys_3.pop(); String $2=yys_1.pop(); 
Unit $$; $$=new Program($2, $4, $5, $6);
yys_2.push($$);}},

// rule -2: <21> unit -> MODULE NAME eol imports interfacePart suffix
new YYR() { public void call(){
yysp-=6; yyq=yyqs[yysp];
DeclBucket $5=yys_6.pop(); List $4=yys_3.pop(); String $2=yys_1.pop(); 
Unit $$; $$ = new ModuleDef($2, $4, $5, new DeclBucket(), new P_Nop());
yys_2.push($$);}},

// rule -3: <22> unit -> MODULE NAME eol imports interfacePart IMPLEMENTATION eol decls suffix
new YYR() { public void call(){
yysp-=9; yyq=yyqs[yysp];
DeclBucket $8=yys_6.pop(); DeclBucket $5=yys_6.pop(); List $4=yys_3.pop(); String $2=yys_1.pop(); 
Unit $$; $$ = new ModuleDef($2, $4, $5, $8, new P_Nop());
yys_2.push($$);}},

// rule -4: <23> unit -> MODULE NAME eol imports interfacePart IMPLEMENTATION eol decls stmts suffix
new YYR() { public void call(){
yysp-=10; yyq=yyqs[yysp];
Statement $9=yys_5.pop(); DeclBucket $8=yys_6.pop(); DeclBucket $5=yys_6.pop(); List $4=yys_3.pop(); String $2=yys_1.pop(); 
Unit $$; $$ = new ModuleDef($2, $4, $5, $8, $9);
yys_2.push($$);}},

// rule -5: <26> suffix -> END '.' eol
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];

}},

// rule -6: <29> interfacePart ->
new YYR() { public void call(){
yyps[yysp]=scanner.line;

DeclBucket $$; $$ = new DeclBucket();
yys_6.push($$);}},

// rule -7: <30> interfacePart -> INTERFACE eol decls
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
DeclBucket $3=yys_6.pop(); 
DeclBucket $$;$$ = $3;
yys_6.push($$);}},

// rule -8: <33> eol -> EOL_
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
}},

// rule -9: <34> eol -> eol EOL_
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];

}},

// rule -10: <37> imports ->
new YYR() { public void call(){
yyps[yysp]=scanner.line;

List $$; $$ = new LinkedList();
yys_3.push($$);}},

// rule -11: <38> imports -> imports importSpec eol
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
D_Import $2=yys_4.pop(); List $1=yys_3.pop(); 
List $$; $1.add($2); $$ = $1;
yys_3.push($$);}},

// rule -12: <41> importSpec -> USES '<' NAME '>'
new YYR() { public void call(){
yysp-=4; yyq=yyqs[yysp];
String $3=yys_1.pop(); 
D_Import $$; $$ = new D_Import($3, $3, true);
yys_4.push($$);}},

// rule -13: <42> importSpec -> USES '<' NAME '>' AS NAME
new YYR() { public void call(){
yysp-=6; yyq=yyqs[yysp];
String $6=yys_1.pop(); String $3=yys_1.pop(); 
D_Import $$; $$ = new D_Import($3, $6, true);
yys_4.push($$);}},

// rule -14: <43> importSpec -> USES STRING AS NAME
new YYR() { public void call(){
yysp-=4; yyq=yyqs[yysp];
String $4=yys_1.pop(); String $2=yys_1.pop(); 
D_Import $$; $$ = new D_Import($2, $4, false);
yys_4.push($$);}},

// rule -15: <44> importSpec -> USES STRING
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
String $2=yys_1.pop(); 
D_Import $$; $$ = new D_Import($2, null, false);
yys_4.push($$);}},

// rule -16: <47> stmts -> statement eol
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
Statement $1=yys_5.pop(); 
Statement $$;$$ = $1;
yys_5.push($$);}},

// rule -17: <48> stmts -> stmts statement eol
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
Statement $2=yys_5.pop(); Statement $1=yys_5.pop(); 
Statement $$; $$ = new P_Sequence($1, $2);
yys_5.push($$);}},

// rule -18: <51> decls ->
new YYR() { public void call(){
yyps[yysp]=scanner.line;

DeclBucket $$; $$ = new DeclBucket();
yys_6.push($$);}},

// rule -19: <52> decls -> decls decl eol
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
Declaration $2=yys_7.pop(); DeclBucket $1=yys_6.pop(); 
DeclBucket $$; $1.declare($2); $$ = $1;
yys_6.push($$);}},

// rule -20: <55> decl -> VAR names
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
List $2=yys_3.pop(); 
Declaration $$; $$ = new D_Var((yyps[yysp+1]), $2, null);
yys_7.push($$);}},

// rule -21: <56> decl -> VAR names ':' typespec
new YYR() { public void call(){
yysp-=4; yyq=yyqs[yysp];
TypeSpec $4=yys_11.pop(); List $2=yys_3.pop(); 
Declaration $$; $$ = new D_Var((yyps[yysp+1]), $2, $4);
yys_7.push($$);}},

// rule -22: <57> decl -> RECORD template IS eol fieldspec END
new YYR() { public void call(){
yysp-=6; yyq=yyqs[yysp];
List $5=yys_3.pop(); Template $2=yys_8.pop(); 
Declaration $$; $$ = new D_Record($2, $5, false);
yys_7.push($$);}},

// rule -23: <58> decl -> RECORD template IS NIL OR eol fieldspec END
new YYR() { public void call(){
yysp-=8; yyq=yyqs[yysp];
List $7=yys_3.pop(); Template $2=yys_8.pop(); 
Declaration $$; $$ = new D_Record($2, $7, true);
yys_7.push($$);}},

// rule -24: <59> decl -> PROCEDURE NAME fps IS routine
new YYR() { public void call(){
yysp-=5; yyq=yyqs[yysp];
Subroutine $5=yys_9.pop(); Signature $3=yys_12.pop(); String $2=yys_1.pop(); 
Declaration $$; $$ = new D_Function((yyps[yysp+1]), true, $2, $3, null, $5);
yys_7.push($$);}},

// rule -25: <60> decl -> FUNCTION NAME fps rangetype IS routine
new YYR() { public void call(){
yysp-=6; yyq=yyqs[yysp];
Subroutine $6=yys_9.pop(); TypeSpec $4=yys_11.pop(); Signature $3=yys_12.pop(); String $2=yys_1.pop(); 
Declaration $$; $$ = new D_Function((yyps[yysp+1]), false, $2, $3, $4, $6); 
yys_7.push($$);}},

// rule -26: <61> decl -> TYPEDEF template IS typespec
new YYR() { public void call(){
yysp-=4; yyq=yyqs[yysp];
TypeSpec $4=yys_11.pop(); Template $2=yys_8.pop(); 
Declaration $$; $$ = new D_TypeDef($2, $4);
yys_7.push($$);}},

// rule -27: <65> template -> NAME
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
String $1=yys_1.pop(); 
Template $$; $$ = new Template((yyps[yysp+0]), $1, new LinkedList<String>());
yys_8.push($$);}},

// rule -28: <66> template -> NAME '<' names '>'
new YYR() { public void call(){
yysp-=4; yyq=yyqs[yysp];
List $3=yys_3.pop(); String $1=yys_1.pop(); 
Template $$; $$ = new Template((yyps[yysp+0]), $1, $3);
yys_8.push($$);}},

// rule -29: <69> routine -> simple
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
Statement $1=yys_5.pop(); 
Subroutine $$; $$ = new Subroutine(new DeclBucket(), $1);
yys_9.push($$);}},

// rule -30: <70> routine -> eol decls stmts END ';'
new YYR() { public void call(){
yysp-=5; yyq=yyqs[yysp];
Statement $3=yys_5.pop(); DeclBucket $2=yys_6.pop(); 
Subroutine $$; $$ = new Subroutine($2, $3);
yys_9.push($$);}},

// rule -31: <73> fieldspec -> fieldgroup eol
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
PT_Group $1=yys_10.pop(); 
List $$; $$ = new LinkedList(); $$.add($1);
yys_3.push($$);}},

// rule -32: <74> fieldspec -> fieldspec fieldgroup eol
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
PT_Group $2=yys_10.pop(); List $1=yys_3.pop(); 
List $$; $$=$1; $$.add($2);
yys_3.push($$);}},

// rule -33: <77> fieldgroup -> names
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
List $1=yys_3.pop(); 
PT_Group $$; $$ = new PT_Group($1, null);
yys_10.push($$);}},

// rule -34: <78> fieldgroup -> names ':' typespec
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
TypeSpec $3=yys_11.pop(); List $1=yys_3.pop(); 
PT_Group $$; $$ = new PT_Group($1, $3);
yys_10.push($$);}},

// rule -35: <81> nominal -> identifier
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
Identifier $1=yys_15.pop(); 
TypeSpec $$; $$ = new PT_Named($1, null);
yys_11.push($$);}},

// rule -36: <82> nominal -> identifier '<' typelist '>'
new YYR() { public void call(){
yysp-=4; yyq=yyqs[yysp];
List $3=yys_3.pop(); Identifier $1=yys_15.pop(); 
TypeSpec $$; $$ = new PT_Named($1, $3);
yys_11.push($$);}},

// rule -37: <85> typespec -> nominal
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
}},

// rule -38: <86> typespec -> '?'
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];

TypeSpec $$; $$ = new PT_DontCare();
yys_11.push($$);}},

// rule -39: <87> typespec -> PROCEDURE domaintype
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
List $2=yys_3.pop(); 
TypeSpec $$; $$ = new PT_Func(true, $2, null);
yys_11.push($$);}},

// rule -40: <88> typespec -> FUNCTION domaintype rangetype
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
TypeSpec $3=yys_11.pop(); List $2=yys_3.pop(); 
TypeSpec $$; $$ = new PT_Func(false, $2, $3);
yys_11.push($$);}},

// rule -41: <89> typespec -> '[' typespec ']'
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
TypeSpec $2=yys_11.pop(); 
TypeSpec $$; $$ = new PT_Array($2);
yys_11.push($$);}},

// rule -42: <92> domaintype ->
new YYR() { public void call(){
yyps[yysp]=scanner.line;

List $$; $$ = null;
yys_3.push($$);}},

// rule -43: <93> domaintype -> '(' ')'
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];

List $$; $$ = new LinkedList();
yys_3.push($$);}},

// rule -44: <94> domaintype -> '(' typelist ')'
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
List $2=yys_3.pop(); 
List $$;$$ = $2;
yys_3.push($$);}},

// rule -45: <97> typelist -> typespec
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
TypeSpec $1=yys_11.pop(); 
List $$; $$ = new LinkedList(); $$.add($1);
yys_3.push($$);}},

// rule -46: <98> typelist -> typelist typespec
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
TypeSpec $2=yys_11.pop(); List $1=yys_3.pop(); 
List $$; $$ = $1; $$.add($2);
yys_3.push($$);}},

// rule -47: <101> rangetype ->
new YYR() { public void call(){
yyps[yysp]=scanner.line;

TypeSpec $$; $$ = null;
yys_11.push($$);}},

// rule -48: <102> rangetype -> ANSWER typespec
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
TypeSpec $2=yys_11.pop(); 
TypeSpec $$;$$ = $2;
yys_11.push($$);}},

// rule -49: <105> fps -> '(' ')'
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];

Signature $$; $$ = new Signature();
yys_12.push($$);}},

// rule -50: <106> fps -> '(' formals ')'
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
Signature $2=yys_12.pop(); 
Signature $$;$$ = $2;
yys_12.push($$);}},

// rule -51: <109> formals -> segment
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
Segment $1=yys_13.pop(); 
Signature $$; $$ = new Signature(); $$.add($1);
yys_12.push($$);}},

// rule -52: <110> formals -> formals ';' segment
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
Segment $3=yys_13.pop(); Signature $1=yys_12.pop(); 
Signature $$; $$ = $1; $$.add($3);
yys_12.push($$);}},

// rule -53: <113> segment -> csnames
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
List $1=yys_3.pop(); 
Segment $$; $$ = new Segment($1);
yys_13.push($$);}},

// rule -54: <114> segment -> csnames ':' typespec
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
TypeSpec $3=yys_11.pop(); List $1=yys_3.pop(); 
Segment $$; $$ = new Segment($1, $3);
yys_13.push($$);}},

// rule -55: <117> csnames -> NAME
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
String $1=yys_1.pop(); 
List $$; $$ = new LinkedList<String>(); $$.add($1);
yys_3.push($$);}},

// rule -56: <118> csnames -> csnames ',' NAME
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
String $3=yys_1.pop(); List $1=yys_3.pop(); 
List $$; $1.add($3);$$=$1;
yys_3.push($$);}},

// rule -57: <121> names -> NAME
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
String $1=yys_1.pop(); 
List $$; $$ = new LinkedList<String>(); $$.add($1);
yys_3.push($$);}},

// rule -58: <122> names -> names NAME
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
String $2=yys_1.pop(); List $1=yys_3.pop(); 
List $$; $1.add($2);$$=$1;
yys_3.push($$);}},

// rule -59: <125> statement -> simple
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
}},

// rule -60: <126> statement -> compound
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
}},

// rule -61: <129> step -> value
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
Exp $1=yys_14.pop(); 
Statement $$; $$ = new P_Eval($1, true, (yyps[yysp+0]));
yys_5.push($$);}},

// rule -62: <130> step -> EVALUATE exp
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
Exp $2=yys_14.pop(); 
Statement $$; $$ = new P_Eval($2, false, (yyps[yysp+0]));
yys_5.push($$);}},

// rule -63: <131> step -> NEXT target
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
String $2=yys_1.pop(); 
Statement $$; $$ = new P_Next($2);
yys_5.push($$);}},

// rule -64: <132> step -> BREAK target
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
String $2=yys_1.pop(); 
Statement $$; $$ = new P_Break($2);
yys_5.push($$);}},

// rule -65: <133> step -> NOP
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];

Statement $$; $$ = new P_Nop();
yys_5.push($$);}},

// rule -66: <134> step -> ANSWER exp
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
Exp $2=yys_14.pop(); 
Statement $$; $$ = new P_Answer($2);
yys_5.push($$);}},

// rule -67: <135> step -> value BECOMES exp
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
Exp $3=yys_14.pop(); Exp $1=yys_14.pop(); 
Statement $$; $$ = new P_Assign($1, (yyps[yysp+1]), $3);
yys_5.push($$);}},

// rule -68: <138> simple -> step
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
}},

// rule -69: <139> simple -> simple ';' step
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
Statement $3=yys_5.pop(); Statement $1=yys_5.pop(); 
Statement $$; $$ = new P_Sequence($1, $3);
yys_5.push($$);}},

// rule -70: <142> compound -> if_then
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
}},

// rule -71: <143> compound -> while_loop
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
}},

// rule -72: <144> compound -> repeat_loop
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
}},

// rule -73: <148> target ->
new YYR() { public void call(){
yyps[yysp]=scanner.line;

String $$; $$ = null;
yys_1.push($$);}},

// rule -74: <149> target -> NAME
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
}},

// rule -75: <155> if_then -> IF exp THEN simple
new YYR() { public void call(){
yysp-=4; yyq=yyqs[yysp];
Statement $4=yys_5.pop(); Exp $2=yys_14.pop(); 
Statement $$; $$ = new P_ITE($2, $4, new P_Nop());
yys_5.push($$);}},

// rule -76: <156> if_then -> IF exp THEN eol stmts END
new YYR() { public void call(){
yysp-=6; yyq=yyqs[yysp];
Statement $5=yys_5.pop(); Exp $2=yys_14.pop(); 
Statement $$; $$ = new P_ITE($2, $5, new P_Nop());
yys_5.push($$);}},

// rule -77: <157> if_then -> IF exp THEN simple else_clause
new YYR() { public void call(){
yysp-=5; yyq=yyqs[yysp];
Statement $5=yys_5.pop(); Statement $4=yys_5.pop(); Exp $2=yys_14.pop(); 
Statement $$; $$ = new P_ITE($2, $4, $5);
yys_5.push($$);}},

// rule -78: <158> if_then -> IF exp THEN eol stmts else_clause
new YYR() { public void call(){
yysp-=6; yyq=yyqs[yysp];
Statement $6=yys_5.pop(); Statement $5=yys_5.pop(); Exp $2=yys_14.pop(); 
Statement $$; $$ = new P_ITE($2, $5, $6);
yys_5.push($$);}},

// rule -79: <161> while_loop -> label WHILE exp DO consequence
new YYR() { public void call(){
yysp-=5; yyq=yyqs[yysp];
Statement $5=yys_5.pop(); Exp $3=yys_14.pop(); String $1=yys_1.pop(); 
Statement $$; $$ = new P_While($1, $3, $5);
yys_5.push($$);}},

// rule -80: <164> label -> NAME ':'
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
String $1=yys_1.pop(); 
String $$;$$ = $1;
yys_1.push($$);}},

// rule -81: <165> label ->
new YYR() { public void call(){
yyps[yysp]=scanner.line;

String $$; $$ = null;
yys_1.push($$);}},

// rule -82: <168> repeat_loop -> label REPEAT simple UNTIL exp
new YYR() { public void call(){
yysp-=5; yyq=yyqs[yysp];
Exp $5=yys_14.pop(); Statement $3=yys_5.pop(); String $1=yys_1.pop(); 
Statement $$; $$ = new P_Repeat($1, $3, $5);
yys_5.push($$);}},

// rule -83: <169> repeat_loop -> label REPEAT eol stmts UNTIL exp
new YYR() { public void call(){
yysp-=6; yyq=yyqs[yysp];
Exp $6=yys_14.pop(); Statement $4=yys_5.pop(); String $1=yys_1.pop(); 
Statement $$; $$ = new P_Repeat($1, $4, $6);
yys_5.push($$);}},

// rule -84: <172> consequence -> simple
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
}},

// rule -85: <173> consequence -> eol stmts END
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
Statement $2=yys_5.pop(); 
Statement $$;$$ = $2;
yys_5.push($$);}},

// rule -86: <176> else_clause -> ELSE consequence
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
Statement $2=yys_5.pop(); 
Statement $$;$$ = $2;
yys_5.push($$);}},

// rule -87: <177> else_clause -> ELSE compound
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
Statement $2=yys_5.pop(); 
Statement $$;$$ = $2;
yys_5.push($$);}},

// rule -88: <180> exp -> epart
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
}},

// rule -89: <181> exp -> epart '?' epart ':' exp
new YYR() { public void call(){
yysp-=5; yyq=yyqs[yysp];
Exp $5=yys_14.pop(); Exp $3=yys_14.pop(); Exp $1=yys_14.pop(); 
Exp $$; $$ = new E_Conditional($1, $3, $5);
yys_14.push($$);}},

// rule -90: <183> epart -> notProp
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
}},

// rule -91: <184> epart -> epart AND notProp
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
Exp $3=yys_14.pop(); Exp $1=yys_14.pop(); 
Exp $$; $$ = new E_And($1, $3, (yyps[yysp+1]));
yys_14.push($$);}},

// rule -92: <185> epart -> epart OR notProp
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
Exp $3=yys_14.pop(); Exp $1=yys_14.pop(); 
Exp $$; $$ = new E_Or($1, $3, (yyps[yysp+1]));
yys_14.push($$);}},

// rule -93: <186> epart -> epart XOR notProp
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
Exp $3=yys_14.pop(); Exp $1=yys_14.pop(); 
Exp $$; $$ = new E_Xor($1, $3, (yyps[yysp+1]));
yys_14.push($$);}},

// rule -94: <187> epart -> epart EQV notProp
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
Exp $3=yys_14.pop(); Exp $1=yys_14.pop(); 
Exp $$; $$ = new E_Eqv($1, $3, (yyps[yysp+1]));
yys_14.push($$);}},

// rule -95: <189> notProp -> prop
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
}},

// rule -96: <190> notProp -> NOT prop
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
Exp $2=yys_14.pop(); 
Exp $$; $$ = new E_Not($2, (yyps[yysp+0]));
yys_14.push($$);}},

// rule -97: <192> prop -> sum
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
}},

// rule -98: <193> prop -> sum relOp sum
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
Exp $3=yys_14.pop(); String $2=yys_1.pop(); Exp $1=yys_14.pop(); 
Exp $$; $$ = E_Call.binary($1, $2, $3, (yyps[yysp+1]));
yys_14.push($$);}},

// rule -99: <194> prop -> sum IS sum
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
Exp $3=yys_14.pop(); Exp $1=yys_14.pop(); 
Exp $$; $$ = new E_Is($1, $3, (yyps[yysp+1]));
yys_14.push($$);}},

// rule -100: <195> prop -> sum IS NOT sum
new YYR() { public void call(){
yysp-=4; yyq=yyqs[yysp];
Exp $4=yys_14.pop(); Exp $1=yys_14.pop(); 
Exp $$; $$ = new E_Not(new E_Is($1, $4, (yyps[yysp+1])), (yyps[yysp+1]));
yys_14.push($$);}},

// rule -101: <197> sum -> term
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
}},

// rule -102: <198> sum -> sum addop term
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
Exp $3=yys_14.pop(); String $2=yys_1.pop(); Exp $1=yys_14.pop(); 
Exp $$; $$ = E_Call.binary($1, $2, $3, (yyps[yysp+1]));
yys_14.push($$);}},

// rule -103: <200> addop -> '+'
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];

String $$; $$ = "+";
yys_1.push($$);}},

// rule -104: <201> addop -> '-'
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];

String $$; $$ = "-";
yys_1.push($$);}},

// rule -105: <202> addop -> '~'
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];

String $$; $$ = "~";
yys_1.push($$);}},

// rule -106: <203> addop -> '&'
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];

String $$; $$ = "&";
yys_1.push($$);}},

// rule -107: <204> addop -> '|'
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];

String $$; $$ = "|";
yys_1.push($$);}},

// rule -108: <205> addop -> BITROT
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
}},

// rule -109: <207> term -> factor
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
}},

// rule -110: <208> term -> term MULOP factor
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
Exp $3=yys_14.pop(); String $2=yys_1.pop(); Exp $1=yys_14.pop(); 
Exp $$; $$ = E_Call.binary($1, $2, $3, (yyps[yysp+1]));
yys_14.push($$);}},

// rule -111: <210> factor -> atom
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
}},

// rule -112: <211> factor -> atom EXPOP factor
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
Exp $3=yys_14.pop(); String $2=yys_1.pop(); Exp $1=yys_14.pop(); 
Exp $$; $$ = E_Call.binary($1, $2, $3, (yyps[yysp+1]));
yys_14.push($$);}},

// rule -113: <213> atom -> REAL
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
String $1=yys_1.pop(); 
Exp $$; $$ = new E_Real($1);
yys_14.push($$);}},

// rule -114: <214> atom -> '+' REAL
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
String $2=yys_1.pop(); 
Exp $$; $$ = new E_Real("+"+$2);
yys_14.push($$);}},

// rule -115: <215> atom -> '-' REAL
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
String $2=yys_1.pop(); 
Exp $$; $$ = new E_Real("-"+$2);
yys_14.push($$);}},

// rule -116: <216> atom -> INT
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
String $1=yys_1.pop(); 
Exp $$; $$ = new E_Int($1);
yys_14.push($$);}},

// rule -117: <217> atom -> '+' INT
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
String $2=yys_1.pop(); 
Exp $$; $$ = new E_Int("+"+$2);
yys_14.push($$);}},

// rule -118: <218> atom -> '-' INT
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
String $2=yys_1.pop(); 
Exp $$; $$ = new E_Int("-"+$2);
yys_14.push($$);}},

// rule -119: <219> atom -> STRING
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
String $1=yys_1.pop(); 
Exp $$; $$ = new E_String($1);
yys_14.push($$);}},

// rule -120: <220> atom -> TRUE
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];

Exp $$; $$ = new E_BoolConst(true);
yys_14.push($$);}},

// rule -121: <221> atom -> FALSE
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];

Exp $$; $$ = new E_BoolConst(false);
yys_14.push($$);}},

// rule -122: <222> atom -> NIL
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];

Exp $$; $$ = new E_Nil();
yys_14.push($$);}},

// rule -123: <223> atom -> NEW identifier '(' record ')'
new YYR() { public void call(){
yysp-=5; yyq=yyqs[yysp];
List $4=yys_3.pop(); Identifier $2=yys_15.pop(); 
Exp $$; $$ = new E_Record($2, $4);
yys_14.push($$);}},

// rule -124: <224> atom -> '[' ']'
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];

Exp $$; $$ = new E_LitArray(new LinkedList<Exp>());
yys_14.push($$);}},

// rule -125: <225> atom -> '[' expList ']'
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
List $2=yys_3.pop(); 
Exp $$; $$ = new E_LitArray($2);
yys_14.push($$);}},

// rule -126: <226> atom -> '[' expList ',' ']'
new YYR() { public void call(){
yysp-=4; yyq=yyqs[yysp];
List $2=yys_3.pop(); 
Exp $$; $$ = new E_LitArray($2);
yys_14.push($$);}},

// rule -127: <227> atom -> value
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
}},

// rule -128: <228> atom -> '+' value
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
Exp $2=yys_14.pop(); 
Exp $$;$$ = $2;
yys_14.push($$);}},

// rule -129: <229> atom -> '-' value
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
Exp $2=yys_14.pop(); 
Exp $$; $$ = E_Call.unary("-", $2, (yyps[yysp+0]));
yys_14.push($$);}},

// rule -130: <230> atom -> '~' value
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
Exp $2=yys_14.pop(); 
Exp $$; $$ = E_Call.unary("~", $2, (yyps[yysp+0]));
yys_14.push($$);}},

// rule -131: <233> relOp -> '='
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];

String $$; $$ = "=";
yys_1.push($$);}},

// rule -132: <234> relOp -> '<'
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];

String $$; $$ = "<";
yys_1.push($$);}},

// rule -133: <235> relOp -> '>'
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];

String $$; $$ = ">";
yys_1.push($$);}},

// rule -134: <236> relOp -> NE
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];

String $$; $$ = "!=";
yys_1.push($$);}},

// rule -135: <237> relOp -> LE
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];

String $$; $$ = "<=";
yys_1.push($$);}},

// rule -136: <238> relOp -> GE
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];

String $$; $$ = ">=";
yys_1.push($$);}},

// rule -137: <241> value -> identifier
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
Identifier $1=yys_15.pop(); 
Exp $$; $$ = new E_Ident($1);
yys_14.push($$);}},

// rule -138: <242> value -> identifier '(' ')'
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
Identifier $1=yys_15.pop(); 
Exp $$; $$ = new E_Call($1, new LinkedList());
yys_14.push($$);}},

// rule -139: <243> value -> identifier '(' expList ')'
new YYR() { public void call(){
yysp-=4; yyq=yyqs[yysp];
List $3=yys_3.pop(); Identifier $1=yys_15.pop(); 
Exp $$; $$ = new E_Call($1, $3);
yys_14.push($$);}},

// rule -140: <244> value -> lambdaForm
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
}},

// rule -141: <245> value -> CALL '(' expList ')'
new YYR() { public void call(){
yysp-=4; yyq=yyqs[yysp];
List $3=yys_3.pop(); 
Exp $$; $$ = new E_Apply($3);
yys_14.push($$);}},

// rule -142: <246> value -> '(' exp ')'
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
Exp $2=yys_14.pop(); 
Exp $$;$$ = $2;
yys_14.push($$);}},

// rule -143: <247> value -> value '.' NAME
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
String $3=yys_1.pop(); Exp $1=yys_14.pop(); 
Exp $$; $$ = new E_Access((yyps[yysp+1]), $1, $3);
yys_14.push($$);}},

// rule -144: <248> value -> value '[' exp ']'
new YYR() { public void call(){
yysp-=4; yyq=yyqs[yysp];
Exp $3=yys_14.pop(); Exp $1=yys_14.pop(); 
Exp $$; $$ = new E_Index($1, $3);
yys_14.push($$);}},

// rule -145: <249> value -> value '.' NAME '(' ')'
new YYR() { public void call(){
yysp-=5; yyq=yyqs[yysp];
String $3=yys_1.pop(); Exp $1=yys_14.pop(); 
Exp $$; $$ = new E_MethodCall($1, $3, new LinkedList());
yys_14.push($$);}},

// rule -146: <250> value -> value '.' NAME '(' expList ')'
new YYR() { public void call(){
yysp-=6; yyq=yyqs[yysp];
List $5=yys_3.pop(); String $3=yys_1.pop(); Exp $1=yys_14.pop(); 
Exp $$; $$ = new E_MethodCall($1, $3, $5);
yys_14.push($$);}},

// rule -147: <253> identifier -> NAME
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
String $1=yys_1.pop(); 
Identifier $$; $$ = new Identifier((yyps[yysp+0]), $1, null);
yys_15.push($$);}},

// rule -148: <254> identifier -> NAME SCOPE NAME
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
String $3=yys_1.pop(); String $1=yys_1.pop(); 
Identifier $$; $$ = new Identifier((yyps[yysp+0]), $1, $3);
yys_15.push($$);}},

// rule -149: <257> lambdaForm -> '&' identifier
new YYR() { public void call(){
yysp-=2; yyq=yyqs[yysp];
Identifier $2=yys_15.pop(); 
Exp $$; $$ = new E_LambdaFnRef($2);
yys_14.push($$);}},

// rule -150: <258> lambdaForm -> value '.' '&' NAME
new YYR() { public void call(){
yysp-=4; yyq=yyqs[yysp];
String $4=yys_1.pop(); Exp $1=yys_14.pop(); 
Exp $$; $$ = new E_LambdaMethod($1, $4, (yyps[yysp+3]));
yys_14.push($$);}},

// rule -151: <259> lambdaForm -> '\' names '{' simple '}'
new YYR() { public void call(){
yysp-=5; yyq=yyqs[yysp];
Statement $4=yys_5.pop(); List $2=yys_3.pop(); 
Exp $$; $$ = new E_LambdaStmt($2, $4, (yyps[yysp+0]));
yys_14.push($$);}},

// rule -152: <260> lambdaForm -> '\' names '(' exp ')'
new YYR() { public void call(){
yysp-=5; yyq=yyqs[yysp];
Exp $4=yys_14.pop(); List $2=yys_3.pop(); 
Exp $$; $$ = new E_LambdaStmt($2, new P_Answer($4), (yyps[yysp+0]));
yys_14.push($$);}},

// rule -153: <261> lambdaForm -> '\' '{' simple '}'
new YYR() { public void call(){
yysp-=4; yyq=yyqs[yysp];
Statement $3=yys_5.pop(); 
Exp $$; $$ = new E_LambdaStmt(new LinkedList<String>(), $3, (yyps[yysp+0]));
yys_14.push($$);}},

// rule -154: <262> lambdaForm -> '\' '(' exp ')'
new YYR() { public void call(){
yysp-=4; yyq=yyqs[yysp];
Exp $3=yys_14.pop(); 
Exp $$; $$ = new E_LambdaStmt(new LinkedList<String>(), new P_Answer($3), (yyps[yysp+0]));
yys_14.push($$);}},

// rule -155: <265> expList -> exp
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
Exp $1=yys_14.pop(); 
List $$; $$ = new LinkedList(); $$.add($1);
yys_3.push($$);}},

// rule -156: <266> expList -> expList ',' exp
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
Exp $3=yys_14.pop(); List $1=yys_3.pop(); 
List $$; $$ = $1; $$.add($3);
yys_3.push($$);}},

// rule -157: <269> record -> field
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
Exp $1=yys_14.pop(); 
List $$; $$ = new LinkedList(); $$.add($1);
yys_3.push($$);}},

// rule -158: <270> record -> record ',' field
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
Exp $3=yys_14.pop(); List $1=yys_3.pop(); 
List $$; $$ = $1; $$.add($3);
yys_3.push($$);}},

// rule -159: <273> field -> exp
new YYR() { public void call(){
yysp-=1; yyq=yyqs[yysp];
}},

// rule -160: <274> field -> NAME ':' exp
new YYR() { public void call(){
yysp-=3; yyq=yyqs[yysp];
Exp $3=yys_14.pop(); String $1=yys_1.pop(); 
Exp $$; $$ = new E_Rename($1, $3);
yys_14.push($$);}},
};
	java.util.Stack<Unit> yys_2 = new java.util.Stack<Unit>();
	java.util.Stack<DeclBucket> yys_6 = new java.util.Stack<DeclBucket>();
	
	java.util.Stack<Statement> yys_5 = new java.util.Stack<Statement>();
	java.util.Stack<Declaration> yys_7 = new java.util.Stack<Declaration>();
	java.util.Stack<Segment> yys_13 = new java.util.Stack<Segment>();
	java.util.Stack<String> yys_1 = new java.util.Stack<String>();
	java.util.Stack<TypeSpec> yys_11 = new java.util.Stack<TypeSpec>();
	java.util.Stack<Exp> yys_14 = new java.util.Stack<Exp>();
	java.util.Stack<PT_Group> yys_10 = new java.util.Stack<PT_Group>();
	java.util.Stack<Subroutine> yys_9 = new java.util.Stack<Subroutine>();
	java.util.Stack<Identifier> yys_15 = new java.util.Stack<Identifier>();
	java.util.Stack<D_Import> yys_4 = new java.util.Stack<D_Import>();
	java.util.Stack<Signature> yys_12 = new java.util.Stack<Signature>();
	java.util.Stack<Template> yys_8 = new java.util.Stack<Template>();
	java.util.Stack<List> yys_3 = new java.util.Stack<List>();
	public void reset(int size) {
		yyps=new int[size]; yyqs=new int[size]; yyqs[0]=yyq=1; yysp=0;
		yys_2.clear();
		yys_6.clear();
		
		yys_5.clear();
		yys_7.clear();
		yys_13.clear();
		yys_1.clear();
		yys_11.clear();
		yys_14.clear();
		yys_10.clear();
		yys_9.clear();
		yys_15.clear();
		yys_4.clear();
		yys_12.clear();
		yys_8.clear();
		yys_3.clear();
	}
	public void take(int type, Unit $$) throws Error { yy_wants(type, 2); yyShift(yyfindShift(type)); yys_2.push($$); }
	public void take(int type, DeclBucket $$) throws Error { yy_wants(type, 6); yyShift(yyfindShift(type)); yys_6.push($$); }
	public void take(int type) throws Error { yy_wants(type, 0); yyShift(yyfindShift(type)); }
	public void take(int type, Statement $$) throws Error { yy_wants(type, 5); yyShift(yyfindShift(type)); yys_5.push($$); }
	public void take(int type, Declaration $$) throws Error { yy_wants(type, 7); yyShift(yyfindShift(type)); yys_7.push($$); }
	public void take(int type, Segment $$) throws Error { yy_wants(type, 13); yyShift(yyfindShift(type)); yys_13.push($$); }
	public void take(int type, String $$) throws Error { yy_wants(type, 1); yyShift(yyfindShift(type)); yys_1.push($$); }
	public void take(int type, TypeSpec $$) throws Error { yy_wants(type, 11); yyShift(yyfindShift(type)); yys_11.push($$); }
	public void take(int type, Exp $$) throws Error { yy_wants(type, 14); yyShift(yyfindShift(type)); yys_14.push($$); }
	public void take(int type, PT_Group $$) throws Error { yy_wants(type, 10); yyShift(yyfindShift(type)); yys_10.push($$); }
	public void take(int type, Subroutine $$) throws Error { yy_wants(type, 9); yyShift(yyfindShift(type)); yys_9.push($$); }
	public void take(int type, Identifier $$) throws Error { yy_wants(type, 15); yyShift(yyfindShift(type)); yys_15.push($$); }
	public void take(int type, D_Import $$) throws Error { yy_wants(type, 4); yyShift(yyfindShift(type)); yys_4.push($$); }
	public void take(int type, Signature $$) throws Error { yy_wants(type, 12); yyShift(yyfindShift(type)); yys_12.push($$); }
	public void take(int type, Template $$) throws Error { yy_wants(type, 8); yyShift(yyfindShift(type)); yys_8.push($$); }
	public void take(int type, List $$) throws Error { yy_wants(type, 3); yyShift(yyfindShift(type)); yys_3.push($$); }
	public Unit finish() throws Error { yyfindShift(0);return yys_2.pop(); }
	private int yyq, yysp;
	private int[] yyps, yyqs;
	public void reset(){ this.reset(256); }
	private void yyShift(int qN){yyqs[++yysp]=yyq=qN;}
	private int yyfindShift(int type) throws Error {
		int i = yyAct(type);
		while (i<0) { yyReduce(-i); i = yyAct(type); }
		if (0 == i) throw new Error(type);
		yyps[yysp] = scanner.line;
		return i;
	}
	private void yyReduce(int rn) {
		yyRules[rn].call();
		yyShift(yyGo(yyLHS[rn]));
	}
	private void yy_wants(int type, int sc) {
		if(yy_sc[type]!=sc) throw new IllegalArgumentException("Wrong semantic for token "+tokens[type]+".");
	}
	static int chr(int ch) throws Error {
		int i=java.util.Arrays.binarySearch(yyCHAR, ch);
		if (i<1) throw new Error(-ch);
		return i;
	}
	{reset();}
}
